perf(#3231): decrease setup time: optimise setup and defer requires until tree open#3308
perf(#3231): decrease setup time: optimise setup and defer requires until tree open#3308alex-courtis wants to merge 24 commits intomasterfrom
Conversation
| if type(bufnr) == "number" then | ||
| local ft | ||
|
|
||
| if vim.fn.has("nvim-0.10") == 1 then |
There was a problem hiding this comment.
Can we expect anyone to still use Nvim 0.9?
There was a problem hiding this comment.
Apparently yes, for debian users.
I did receive some pushback when I recently discussed increasing the minimum version, although I cannot find that conversation.
It's not a problem right now, however I will revisit if it becomes a problem.
Edit: I think upgrading might be difficult for people on locked down corporate computers or remote environments.
There was a problem hiding this comment.
Debian 12.13 (current oldstable) has Nvim 0.7.2, Debian 13.3 has 0.10.4-8. I didn't check other distros.
https://github.com/search?q=repo%3Anvim-tree%2Fnvim-tree.lua+%220.9%22&type=issues&s=created&o=desc - rather nothing relatively fresh.
|
@alex-courtis thanks for the great job! I'll try to find a time to compare startup times. Now I only switched to this change and see no issues. For two months I changed my lazy loader to even |
fixes #3253
fixes #3231
nvim-tree is now completely lazy on startup and requires the minimum when:
setup time ~1ms, down from ~8ms, see #3229 timings
@przepompownia @perrin4869 I would be most grateful for your testing of this branch, ensuring that the load times have been significantly reduced.
Using minimal config:
log
log
log
``` --- Startup times for process: Primary (or UI client) ---times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.001 000.001: --- NVIM STARTING ---
000.064 000.063: event init
000.108 000.045: early init
000.126 000.017: locale set
000.146 000.021: init first window
000.342 000.196: inits 1
000.347 000.005: window checked
000.349 000.002: parsing arguments
000.665 000.026 000.026: require('vim.shared')
000.714 000.022 000.022: require('vim.inspect')
000.741 000.023 000.023: require('vim._options')
000.742 000.075 000.031: require('vim._editor')
000.743 000.124 000.023: require('vim._init_packages')
000.744 000.270: init lua interpreter
001.391 000.647: nvim_ui_attach
001.565 000.174: nvim_set_client_info
001.566 000.001: --- NVIM STARTED ---
--- Startup times for process: Embedded ---
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.001 000.001: --- NVIM STARTING ---
000.081 000.081: event init
000.139 000.058: early init
000.158 000.019: locale set
000.171 000.012: init first window
000.318 000.148: inits 1
000.324 000.006: window checked
000.325 000.001: parsing arguments
000.594 000.022 000.022: require('vim.shared')
000.642 000.021 000.021: require('vim.inspect')
000.666 000.019 000.019: require('vim._options')
000.667 000.072 000.032: require('vim._editor')
000.668 000.109 000.016: require('vim._init_packages')
000.669 000.234: init lua interpreter
000.701 000.033: expanding arguments
000.709 000.008: inits 2
000.846 000.137: init highlight
000.846 000.000: waiting for UI
000.906 000.060: done waiting for UI
000.909 000.003: clear screen
000.977 000.006 000.006: require('vim.keymap')
001.391 000.073 000.073: sourcing nvim_exec2()
001.463 000.552 000.474: require('vim._defaults')
001.463 000.002: init default mappings & autocommands
001.642 000.032 000.032: sourcing /usr/share/nvim/runtime/ftplugin.vim
001.665 000.011 000.011: sourcing /usr/share/nvim/runtime/indent.vim
002.341 000.078 000.078: require('packer.util')
002.372 000.606 000.527: require('packer')
002.679 000.101 000.101: require('packer.log')
002.681 000.164 000.063: require('packer.async')
002.796 000.030 000.030: require('packer.result')
002.798 000.116 000.087: require('packer.jobs')
002.801 000.420 000.140: require('packer.plugin_utils')
002.900 000.096 000.096: require('packer.snapshot')
002.907 000.005 000.005: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.911 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.913 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.916 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.918 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.920 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.922 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.924 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.926 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.927 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.930 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.964 000.029 000.029: require('nvim-tree')
002.995 000.012 000.012: require('nvim-tree._meta.api.appearance')
003.005 000.010 000.010: require('nvim-tree._meta.api.commands')
003.019 000.014 000.014: require('nvim-tree._meta.api.config')
003.033 000.013 000.013: require('nvim-tree._meta.api.events')
003.050 000.017 000.017: require('nvim-tree._meta.api.filter')
003.071 000.021 000.021: require('nvim-tree._meta.api.fs')
003.080 000.008 000.008: require('nvim-tree._meta.api.git')
003.090 000.010 000.010: require('nvim-tree._meta.api.map')
003.107 000.017 000.017: require('nvim-tree._meta.api.marks')
003.151 000.044 000.044: require('nvim-tree._meta.api.node')
003.188 000.036 000.036: require('nvim-tree._meta.api.tree')
003.240 000.034 000.034: require('nvim-tree.classic')
003.242 000.054 000.020: require('nvim-tree._meta.api.decorator')
003.257 000.014 000.014: require('nvim-tree._meta.api.deprecated')
003.451 000.194 000.194: require('nvim-tree.api.impl')
003.541 000.039 000.039: require('nvim-tree.renderer.decorator')
003.617 000.076 000.076: require('nvim-tree.legacy')
003.618 000.654 000.077: require('nvim-tree.api')
003.719 000.100 000.100: require('nvim-tree.appearance')
004.717 000.003 000.003: require('vim.F')
004.736 000.690 000.687: require('vim.diagnostic')
004.742 000.906 000.216: require('nvim-tree.config')
004.742 001.023 000.117: require('nvim-tree.autocmd')
004.792 000.049 000.049: require('nvim-tree.log')
004.835 000.043 000.043: require('nvim-tree.view-state')
004.911 000.023 000.023: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
004.916 000.003 000.003: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
005.068 003.394 000.329: sourcing /tmp/nd/config/nvim/nd.lua
005.069 000.169: sourcing vimrc file(s)
005.162 000.012 000.012: sourcing /usr/share/nvim/site/ftdetect/ghostty.vim
005.176 000.055 000.043: sourcing nvim_exec2() called at /usr/share/nvim/runtime/filetype.lua:0
005.177 000.090 000.035: sourcing /usr/share/nvim/runtime/filetype.lua
005.253 000.037 000.037: sourcing /usr/share/nvim/runtime/syntax/synload.vim
005.297 000.100 000.064: sourcing /usr/share/nvim/runtime/syntax/syntax.vim
005.530 000.076 000.076: sourcing /usr/share/nvim/runtime/plugin/gzip.vim
005.539 000.004 000.004: sourcing /usr/share/nvim/runtime/plugin/matchit.vim
005.607 000.059 000.059: sourcing /usr/share/nvim/runtime/plugin/matchparen.vim
005.615 000.003 000.003: sourcing /usr/share/nvim/runtime/plugin/netrwPlugin.vim
005.673 000.003 000.003: sourcing /home/alex/.local/share/nvim/rplugin.vim
005.676 000.056 000.054: sourcing /usr/share/nvim/runtime/plugin/rplugin.vim
005.702 000.024 000.024: sourcing /usr/share/nvim/runtime/plugin/shada.vim
005.724 000.005 000.005: sourcing /usr/share/nvim/runtime/plugin/spellfile.vim
005.766 000.037 000.037: sourcing /usr/share/nvim/runtime/plugin/tarPlugin.vim
005.778 000.006 000.006: sourcing /usr/share/nvim/runtime/plugin/tutor.vim
005.833 000.050 000.050: sourcing /usr/share/nvim/runtime/plugin/zipPlugin.vim
005.861 000.022 000.022: sourcing /usr/share/nvim/runtime/plugin/editorconfig.lua
005.895 000.028 000.028: sourcing /usr/share/nvim/runtime/plugin/man.lua
005.929 000.029 000.029: sourcing /usr/share/nvim/runtime/plugin/osc52.lua
005.953 000.016 000.016: sourcing /usr/share/nvim/runtime/plugin/tohtml.lua
005.958 000.281: loading rtp plugins
006.126 000.111 000.111: require('nvim-tree.commands')
006.222 000.212 000.100: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-tree.lua.dev/plugin/nvim-tree.lua
006.260 000.013 000.013: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-web-devicons/plugin/nvim-web-devicons.vim
006.344 000.064 000.064: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/packer.nvim/plugin/packer_compiled.lua
006.346 000.100: loading packages
006.347 000.001: loading after plugins
006.353 000.006: inits 3
007.397 001.044: reading ShaDa
007.436 000.039: opening buffers
007.443 000.007: BufEnter autocommands
007.444 000.001: editing files in windows
007.458 000.014: VimEnter autocommands
007.513 000.047 000.047: require('vim.termcap')
007.528 000.009 000.009: require('vim.text')
007.536 000.021: UIEnter autocommands
007.539 000.002: before starting main loop
007.695 000.156: first screen update
007.697 000.002: --- NVIM STARTED ---